package com.heather.exam.service.impl;

import com.heather.exam.mapper.ClassMapper;
import com.heather.exam.pojo.vo.ClassScore;
import com.heather.exam.pojo.vo.UserInClassVO;
import com.heather.exam.service.ClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

@Service
public class ClassServiceImpl implements ClassService {
    @Autowired
    ClassMapper classMapper;

    @Override
    public Integer addClass(String name, Integer userId) {
        return classMapper.addClass(name, userId);
    }

    @Override
    public Integer joinClass(String classId, Integer userId) {
        boolean b = classMapper.checkAndJoinClass(classId, userId);
        if (b){
            return 0;
        }
        return classMapper.joinClass(classId, userId);
    }

    @Override
    public List<UserInClassVO> getAll(String classId) {
        return classMapper.getAllClass(classId);
    }

    @Override
    public List<UserInClassVO> joinList(String classId) {
        return classMapper.joinList(classId);
    }

    @Override
    public Integer check(String classId, Integer userId, String studentId) {
        if (checkAndJoinClass(classId, userId)){
            boolean b = checkAndJoinClass(classId, Integer.parseInt(studentId));
            if (b){
                return 1;
            }
            return 0;
        }
        return null;
    }

    @Override
    public List<ClassScore> getScore(String classId, String examId) {
        List<UserInClassVO> userInClassList  = getAllClass(classId);
        // 假设有一个空的 ClassScore 列表，用于存放复制后的数据
        List<ClassScore> classScoreList  = new ArrayList<>();

// 遍历 UserInClassVO 列表
        for (UserInClassVO userInClass : userInClassList) {
            // 创建一个新的 ClassScore 对象
            ClassScore classScore = new ClassScore();

            // 复制所需字段
            classScore.setUserid(String.valueOf(userInClass.getUserId())); // 将整数型 userId 转换为字符串，假设 ClassScore 中的 userid 字段为字符串类型
            classScore.setName(userInClass.getUsername());

            // 如果 ClassScore 中的其他字段有默认值或不需要设置，则保持原样

            // 将新创建的 ClassScore 对象添加到目标列表
            classScoreList.add(classScore);
        }
//        遍历这个ClassScore列表，并且根据userid查询考试成绩，然后将成绩设置到ClassScore对象中。
        for (ClassScore classScore : classScoreList) {
            // 根据userid查询考试成绩，假设有一个方法getExamScoreByUserId(String userId)，返回一个double类型的成绩
            int examScore = getExamScoreByUserId(classScore.getUserid(),examId);

            // 将成绩设置到ClassScore对象中
            classScore.setScore(String.valueOf(examScore));
        }
        return classScoreList;
    }

    private int getExamScoreByUserId(String userid,String examid) {
        return classMapper.getScore(userid,examid);
    }

    //    检查班级是否有这个人
    private boolean checkAndJoinClass(String classId, int userId) {
        return classMapper.existsByClassIdAndUserId(classId, userId);
    }
//    获取班级下的学生列表
    public List<UserInClassVO> getAllClass(String classId) {
        return classMapper.getAllClass(classId);
    }
}
